package main

import (
	"fmt"
	"os"
)

//学生管理系统

type student struct{
	id int
	name string
	age int
}
var (
	allStudent map[int]*student //全局变量声明
)
//newStudent是studnet类型中的构造函数
func newStudent(id int, name string, age int) *student {
	return &student{
		id:id,
		name:name,
		age:age,
	}
}
func showAllStudent(){
	//把所有学生打印出来
	for k,v:=range allStudent{
		fmt.Printf("学号:%d,姓名:%s,年龄:%d",k,v.name,v.age)
		fmt.Println()
	}
}
func addStudent(){
	//向allStudent中添加一个新的学生
	//1.创建一个新学生,获取用户输入
	var (
		id int
		name string
		age int
	)
	fmt.Printf("请输入学生的学号: ")
	fmt.Scanln(&id)
	fmt.Printf("请输入学生的姓名: ")
	fmt.Scanln(&name)
	fmt.Printf("请输入学生的年龄: ")
	fmt.Scanln(&age)
	
	//2调用构造函数
	//2.1造学生(调用student的构造方法)
	newStu:=newStudent(id,name,age)
	//3追加到allStudent这个map中
	allStudent[id]=newStu
}
func deleteStudent(){
	//1请用户确认要删除的学生
	var(
		deletId int
	)
	fmt.Print("请输入要删除的学生学号: ")
	fmt.Scanln(&deletId)
	//2去allStudent这个map中根据学号删除相应的键值对
	delete(allStudent,deletId)
}

func main() {
	allStudent = make(map[int]*student,48) //初始化(开辟内存空间))
	for{
	//1.打印菜单
	fmt.Println("欢迎登录学生管理系统")
	fmt.Println(`
		1.查看所有学生
		2.新增学生
		3.删除学生
		4.退出系统
	`)
	fmt.Print("请输入你的操作: ")
	//2等待用户选择要做什么
	var choice int
	fmt.Scanln(&choice)
	fmt.Printf("选择的选项是%d:\n",choice)
	//3.根据选项执行对应的功能函数
	switch choice{
		case 1: //当选择1时,显示全部学生
			showAllStudent()
		case 2: //当选择2时,新增学生
			addStudent()
		case 3: //当选择3时,删除学生
			deleteStudent()
	    case 4: //当选择4时,退出学生管理系统
			os.Exit(1)
		default: //当输入的id不在范围时,提示输入有误
		fmt.Printf("您的选择有误!~")
	}
}
}